home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 November / PCWorld_2006-11_cd.bin / domacnost a kancelar / findgraph / fgraph.exe / {app} / TestVC / Subclass.h < prev   
C/C++ Source or Header  |  2002-08-09  |  2KB  |  61 lines

  1. ////////////////////////////////////////////////////////////////
  2. // from DiLascia MSDN\Coolmenu\MBTest\Subclass.cpp
  3. //
  4. #ifndef _SUBCLASSW_H
  5. #define _SUBCLASSW_H
  6.  
  7. //////////////////
  8. // Generic class to hook messages on behalf of a CWnd.
  9. // Once hooked, all messages go to CSubclassWnd::WindowProc before going
  10. // to the window. Specific subclasses can trap messages and do something.
  11. //
  12. // To use:
  13. //
  14. // * Derive a class from CSubclassWnd.
  15. //
  16. // * Override CSubclassWnd::WindowProc to handle messages. Make sure you call
  17. //   CSubclassWnd::WindowProc if you don't handle the message, or your
  18. //   window will never get messages. If you write seperate message handlers,
  19. //   you can call Default() to pass the message to the window.
  20. //
  21. // * Instantiate your derived class somewhere and call HookWindow(pWnd)
  22. //   to hook your window, AFTER it has been created.
  23. //      To unhook, call HookWindow(NULL).
  24. //
  25. // This is a very important class, crucial to many of the widgets Window
  26. // widgets implemented in PixieLib. To see how it works, look at the HOOK
  27. // sample program.
  28. //
  29. class CSubclassWnd : public CObject {
  30. public:
  31.     DECLARE_DYNAMIC(CSubclassWnd);
  32.     CSubclassWnd();
  33.     ~CSubclassWnd();
  34.  
  35.     // Subclass a window. Hook(NULL) to unhook (automatic on WM_NCDESTROY)
  36.     BOOL    HookWindow(HWND  hwnd);
  37.     BOOL    HookWindow(CWnd* pWnd)    { 
  38. return HookWindow(pWnd->GetSafeHwnd()); }
  39.     BOOL    IsHooked()                    { return m_hWnd!=NULL; }
  40.  
  41.     friend LRESULT CALLBACK HookWndProc(HWND, UINT, WPARAM, LPARAM);
  42.     friend class CSubclassWndMap;
  43.  
  44. #ifdef _DEBUG
  45.     virtual void AssertValid() const;
  46.     virtual void Dump(CDumpContext& dc) const;
  47. #endif
  48.  
  49. protected:
  50.     HWND                m_hWnd;                // the window hooked
  51.     WNDPROC            m_pOldWndProc;        // ..and original window proc
  52.     CSubclassWnd*    m_pNext;                // next in chain of hooks for this window
  53.  
  54.     // Override this to handle messages in specific handlers
  55.     virtual LRESULT WindowProc(UINT msg, WPARAM wp, LPARAM lp);
  56.     LRESULT Default();                // call this at the end of handler fns
  57. };
  58.  
  59. #endif // _SUBCLASSW_H
  60.  
  61.